options results /* indispensable pour récupérer le résultat des macros */
signal on error /* pour l'interception des erreurs */
signal on syntax
'LOCK(-1)' /* verrouillage des fenêtres */
'BLOCK(1)'; l1 = result
if l1 <= 0 then
call marquage_bloc
else do
'BLOCK(3)'; l2 = result
end
mg=getclip(marge_gauche)
md=getclip(marge_droite)
if (mg="" | md="") then call fixer_marges
if (mg<0 | mg>md-30) then call fixer_marges
nbcar=md-mg+1 /* nbre de caractères par ligne */
'TITLE("Formatage en cours...")'
texte=''
do l=l1 to l2
'READLINE('l')' /* lecture d'une ligne */
ligne = result
ligne=strip(ligne) /* élimination des espaces de début et de fin */
texte= texte || ligne
if l < l2 then texte = texte || ' '
end
/* démarquage du bloc */
'UNMARK(0):GOTO(1,'l1')'
position = 1 /* préparation du traitement */
do i=1 while position <= length(texte)
PosFin = lastpos(' ',texte' ', position+nbcar)
if PosFin > position then
ligne = substr(texte, position, PosFin-position+1,' ')
else
leave
position = PosFin + 1
if l1 <= l2 then
'DELEND(0)'
else
'INSLINES(1)'
'GOTO('mg',LINE)'
call ecriture(ligne)
l1 = l1+1
'IF(LINE<NBLINES,GOTO(1,LINE+1),0)'
end
if l1 <= l2 then 'SUPLINES('l2-l1+1')'
'TITLE("")'
exit
fixer_marges: procedure expose mg md
cr = '0a'x
'MESSAGE("Cliquez sur la marge gauche'cr'puis sur la marge droite.'cr'Vous pouvez utiliser'cr'l''ascenseur et les'cr'flèches pour faire défiler'cr'le texte.")'
'REQUEST("Voulez-vous marquer le'||cr||'bloc à formater?")'
if result=0 then exit
'MESSAGE("Cliquez sur la ligne de début'cr'puis sur la ligne de fin.'cr'Vous pouvez utiliser'cr'l''ascenseur et les'cr'flèches pour faire défiler'cr'le texte.")'
'PICKLINE("Cliquez sur la ligne de début")'
l1=result
if l1<1 then exit
'PICKLINE("Cliquez sur la ligne de fin")'
l2=result
if l2<1 then exit
return
end
ecriture: procedure
parse arg ligne
position=1
do forever
position=index(ligne,'"',position) /* test présence guillemet */
if position>0 then do
ligne=insert('"',ligne,position) /* doublure des guillemets */
position = position+2 /* passage aux suivants éventuels */
end
else do
'WRITE("'ligne'")'
return
end
end
end
/* Traitement des erreurs, interruption du programme */
syntax:
erreur=RC
'MESSAGE("Script Formater"+CHR(10)+"Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
'TITLE("")'
exit
error:
'MESSAGE("Script Formater"+CHR(10)+"Erreur en ligne 'SIGL'")'